		LIST   P=PIC16F877A
		RADIX	HEX		
		INCLUDE	<P16F877A.INC>

ORG		0x00
goto	START	;Inicio del Programa

count		equ	0x21
dec_count	equ	0x22
top			equ	0x23
temp		equ	0x24


read_c							;Revisa el Puerto C
			movlw	0
			movf	PORTC,0
			clrf		PORTC
			andlw	1			;AND entre PORTC y 	1
			movwf	temp
			btfss	temp,0		;Evalua cada bit para ver si el resultado
			RETURN			;del and es b'11111111'
			btfss	temp,1
			RETURN
			btfss	temp,2
			RETURN
			btfss	temp,3
			RETURN
			btfss	temp,4
			RETURN
			btfss	temp,5
			RETURN
			btfss	temp,6
			RETURN
			btfss	temp,7
			RETURN
			call		increase	;en caso de ser cierto, llama la subrutina increase

top_test						;evalua si el contador es igual a 99
			movlw	0
			movlw	63
			movwf	top
			movlw	0
			movf	count,0
			andwf	top,0
			clrf		temp
			movwf	temp
			btfss	temp,0
			RETURN
			btfss	temp,1
			RETURN
			btfss	temp,2
			RETURN
			btfss	temp,3
			RETURN
			btfss	temp,4
			RETURN
			btfss	temp,5
			RETURN
			btfss	temp,6
			RETURN
			btfss	temp,7
			RETURN
			goto	restore		;si es igual a 99 lo convierte en 1


restore		movlw	0x00		;cambia el valor del contador a 1
			movlw	0x01
			movwf	count

increase	incf		count		;incrementa el valor del contador
			call		dec_mult

display		
			movf	count,0		;envia las decenas al puerto A y las unidades 
			movwf	temp		;al puerto B
			movf	dec_count,0
			subwf	temp,1
			movwf	PORTA
			movf	temp,0
			movwf	PORTB
			goto	START

dec_mult						;Si el valor del contador es multiplo de 10
			addlw	0x0A		;lo guarda para enviarlo al puerto A
			andwf	count,0
			movwf	temp
			btfss	temp,0
			RETURN
			btfss	temp,1
			RETURN
			btfss	temp,2
			RETURN
			btfss	temp,3
			RETURN
			btfss	temp,4
			RETURN
			btfss	temp,5
			RETURN
			btfss	temp,6
			RETURN
			btfss	temp,7
			RETURN 	
			movf	temp,0
			movwf	dec_count
			
START							;Inicio del Programa
		call		read_c
		call		top_test
		goto	display
				
END


